import {
  TODO_ADD,
  TODO_CLEAR_DONE,
  TODO_DEL,
  TODO_UPDATE_BY_ID,
  TODO_UPDATE_TYPE,
} from './actionType';

export function delByIdAction(id) {
  return {
    type: TODO_DEL,
    payload: id,
  };
}

export const updateByIdAction = (id) => {
  return {
    type: TODO_UPDATE_BY_ID,
    payload: id,
  };
};

export const clearDoneAction = () => ({
  type: TODO_CLEAR_DONE,
});

export const updateTypeAction = (type) => ({
  type: TODO_UPDATE_TYPE,
  payload: type,
});

// 模拟的API
function loadNewTodoAPI() {
  const newTodo = {
    task: '异步返回的任务',
    id: Date.now(),
    isDone: false,
  };
  console.log('开始请求');

  return new Promise((resolve) => {
    setTimeout(() => {
      console.log('请求成功，2秒后,数据返回');
      resolve(newTodo);
    }, 2000);
  });
}

export const AddAction = (newTask) => {
  // return {
  //   type: TODO_ADD,
  //   payload: newTask,
  // };

  //  3. 💥action创建函数， 返回一个异步函数
  return async (dispatch) => {
    console.log('dispatch  ----->  ', dispatch);
    const result = await loadNewTodoAPI();
    // 4. 💥通过形参的dispatch，继续调用diapatch(action)
    dispatch({ type: TODO_ADD, payload: result });
  };
};
